package com.example.jsd2205.vx.emos;

import cn.hutool.core.util.StrUtil;
import com.example.jsd2205.vx.emos.config.SystemConstants;
import com.example.jsd2205.vx.emos.db.dao.SysConfigDao;
import com.example.jsd2205.vx.emos.db.pojo.SysConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;

import javax.annotation.PostConstruct;
import java.io.File;
import java.lang.reflect.Field;
import java.util.List;

/**
 * 实现考勤签到功能(上班，迟到，早退，缺勤)
 * 调用持久层代码读取数据
 * 把数据保存在封装类的对象里
 * @author admin苗
 */
@SpringBootApplication
@ServletComponentScan//作用,让创建的Filter生效
@Slf4j
@EnableAsync
public class Jsd2205VxEmosApiApplication {

    /**
     * 引用查询考勤接口调用内部方法
     */
    @Autowired
    private SysConfigDao sysConfigDao;

    /**
     * 引用常量封装类
     */
    @Autowired
    private SystemConstants constants;
    /**
     * 保存图片的地址
     */
    @Value("${emos.image-folder}")
    private String imageFolder;

    public static void main(String[] args) {
        SpringApplication.run(Jsd2205VxEmosApiApplication.class, args);
    }
    /**
     * 读取常量数据并缓存
     */
    @PostConstruct
    public void init(){
        //调用selectAllParam方法
        List<SysConfig> list=sysConfigDao.selectAllParam();
        list.forEach(one->{
            //取出常量名字
            String key=one.getParamKey();
            //调用StrUtil里的toCamelCase方法
            //把名字转换成驼峰命名法格式
            key= StrUtil.toCamelCase(key);
            //取出常量值
            String value=one.getParamValue();
            try{
                //通过反射机制给封装对象赋值
                Field field=constants.getClass().getDeclaredField(key);
                field.set(constants,value);
            }catch (Exception e){
                log.error("执行异常",e);
            }
        });
        /*
        初始化保存文件的文件夹
         */
        new File(imageFolder).mkdirs();
        System.out.println("创建文件夹! 保存图片地址的路径!");
    }
}
